package cc.rengu.igas.channel.upac.facade;

import cc.rengu.igas.channel.upac.facade.request.*;
import cc.rengu.igas.channel.upac.facade.response.*;
import cc.rengu.igas.channel.upac.facade.result.Result;

/**
 * 银联全渠道代收业务API组件
 */
public interface UpacCollectionService {

    /**
     * 代收签约触发短信服务
     *
     * @param collectionSignWithSmsRequest 代收签约请求
     * @return 代收签约触发短信应答
     * @
     */
    Result<CollectionSignWithSmsResponse> collectionSignWithSms(CollectionSignWithSmsRequest collectionSignWithSmsRequest);

    /**
     * 代收签约服务
     *
     * @param collectionSignRequest 代收签约请求
     * @return 代收签约应答
     * @
     */
    Result<CollectionSignResponse> collectionSign(CollectionSignRequest collectionSignRequest);

    /**
     * 解除签约关系服务
     *
     * @param collectionSignCancelRequest 解除签约关系请求
     * @return 解除签约关系应答
     * @
     */
    Result<CollectionSignCancelResponse> collectionSignCancel(CollectionSignCancelRequest collectionSignCancelRequest);

    /**
     * 代收交易状态查询服务
     *
     * @param collectionTransStateQueryRequest 交易状态查询请求
     * @return 交易状态查询应答
     * @
     */
    Result<CollectionTransStateQueryResponse> collectionTransStateQuery(CollectionTransStateQueryRequest collectionTransStateQueryRequest);

    /**
     * 消费撤销
     *
     * @param collectionConsumeCancelRequest 消费撤销请求
     * @return 消费撤销应答
     * @
     */
    Result<CollectionConsumeCancelResponse> collectionConsumeCancel(CollectionConsumeCancelRequest collectionConsumeCancelRequest);

    /**
     * 消费退货服务
     *
     * @param collectionConsumeRefundRequest 退货请求
     * @return 退货应答
     * @
     */
    Result<CollectionConsumeRefundResponse> collectionConsumeRefund(CollectionConsumeRefundRequest collectionConsumeRefundRequest);


    /**
     * 银联全渠道单笔代收
     *
     * @param collectionRequest
     * @return 代收应答
     * @
     */
    Result<CollectionResponse> singleCollection(CollectionRequest collectionRequest);


    /**
     * 银联全渠道批量代收
     *
     * @param batCollectionRequest
     * @return 批量代收应答
     * @
     */
    Result<BatCollectionResponse> batCollection(BatCollectionRequest batCollectionRequest);


    /**
     * 银联全渠道批量代收交易状态查询
     *
     * @param batCollectionStateQueryRequest
     * @return 批量代收交易状态查询应答
     * @
     */
    Result<BatCollectionStateQueryResponse> batCollectionStateQuery(BatCollectionStateQueryRequest batCollectionStateQueryRequest);
}
